$(document).ready(function() {
	$('#rolePanel').panel({
		title : '角色列表',
		width : pageWidth * 0.45,
		height : pageHeight * 0.95
	});

	$('#roleDatagrid').datagrid({
		fit : true,
		fitColumns : true,
		singleSelect : true,
		striped : true,
		url : ctx + '/sys/role/query',
		columns : [ [ {
			field : 'roleId',
			title : '角色编号'
		}, {
			field : 'roleName',
			title : '角色名称'
		}, {
			field : 'roleAlias',
			title : '角色别称'
		}, {
			field : 'creator',
			title : '创建者',
			formatter : function(value, row, index) {
				return value.userName;
			}
		}, {
			field : 'crtTime',
			title : '创建时间',
			formatter : function(value, row, index) {
				var dateValue = new Date(value);
				return dateValue.format('yyyy-MM-dd HH:mm:ss');
			}
		} ] ],
		toolbar : [ {
			text : '新增',
			iconCls : 'icon-add',
			handler : function() {
				openRoleDiv();
			}
		}, '-', {
			text : '修改',
			iconCls : 'icon-edit',
			handler : function() {
				var roleNode = $('#roleDatagrid').datagrid('getSelected');

				if (roleNode == null) {
					EasyUI.ShowMessage({
						msg : '请选择角色！'
					});
				} else {
					openRoleDiv(roleNode);
				}
			}
		}, '-', {
			text : '删除',
			iconCls : 'icon-remove',
			handler : function() {
				var roleNode = $('#roleDatagrid').datagrid('getSelected');

				if (roleNode == null) {
					EasyUI.ShowMessage({
						msg : '请选择角色！'
					});
				} else {
					removeRole(roleNode);
				}
			}
		}, '-', {
			text : '刷新',
			iconCls : 'icon-reload',
			handler : function() {
				$('#roleDatagrid').datagrid('reload');
			}
		} ],
		onClickRow : function(rowIndex, rowData) {
			loadRoleMenuTree(rowData.roleId);
		}
	});

	$('#roleDetailPanel').panel({
		title : '角色资源',
		width : pageWidth * 0.45,
		height : pageHeight * 0.55,
		noheader : true
	});

	$('#menuTreegrid').treegrid({
		border : false,
		fit : true,
		animate : true,
		idField : 'id',
		treeField : 'text',
		fitColumns : true,
		columns : [ [ {
			title : '菜单名',
			field : 'text',
			width : 20
		}, {
			title : '创建者',
			field : 'crtName',
			width : 10
		}, {
			title : '创建时间',
			field : 'crtTime',
			width : 11
		} ] ],
		data : [],
		toolbar : [ {
			text : '配置',
			iconCls : 'icon-add',
			handler : function() {
				var roleRow = $('#roleDatagrid').datagrid('getSelected');
				if (roleRow == null) {
					EasyUI.ShowMessage({
						msg : '请选择角色！'
					});
				} else {
					loadRoleMenuTree(roleRow.roleId);
					openRoleMenuDiv();
				}
			}
		}, '-', {
			text : '刷新',
			iconCls : 'icon-reload',
			handler : function() {
				var roleRow = $('#roleDatagrid').datagrid('getSelected');
				if (roleRow == null) {
					EasyUI.ShowMessage({
						msg : '请选择角色！'
					});
				} else {
					loadRoleMenuTree(roleRow.roleId);
				}
			}
		} ]
	});
	
	$('#roleUserPanel').panel({
		title : '关联用户',
		width : pageWidth * 0.45,
		height : pageHeight * 0.4
	});

	$('#roleDiv').dialog({
		width : 400,
		height : 'auto',
		modal : true,
		closable : false,
		closed : true,
		buttons : [ {
			iconCls : 'icon-save',
			text : '保存',
			handler : saveRole
		}, {
			iconCls : 'icon-cancel',
			text : '关闭',
			handler : closeMenuDiv
		} ]
	});

	$('#roleMenuTree').tree({
		animate : true,
		lines : true,
		checkbox : true,
		data : getAllMenu(),
		onLoadSuccess : function(node, data) {
			// 展开树
			$('#roleMenuTree').tree('expandAll');

		}
	});
	
	$('#roleMenuDiv').dialog({
		title : '菜单配置',
		width : 400,
		height : 'auto',
		modal : true,
		closable : false,
		closed : true,
		buttons : [ {
			iconCls : 'icon-save',
			text : '保存',
			handler : saveRoleMenu
		}, {
			iconCls : 'icon-cancel',
			text : '关闭',
			handler : function() {
				$('#roleMenuDiv').dialog('close');
			}
		} ]
	});
});

/**
 * 获取全部菜单（通过）
 * 
 * @returns {Array}
 */
function getAllMenu() {
	var menu = [];
	$.ajax({
		url : ctx + '/sys/menu/query?' + Math.random(),
		async : false,
		data : {
			parentMenuId : baseMenuId,
			searchSubmenu : true
		},
		success : function(data) {
			menu = EasyUI.GenerateTreeData({
				data : $.parseJSON(data)
			});
		}
	});
	return menu;
}

/**
 * 关闭新增菜单DIV
 */
function closeMenuDiv() {
	$('#roleForm').form('disableValidation');
	$('#roleForm').form('reset');
	$('#roleForm').form('enableValidation');
	$('#roleDiv').dialog('close');
}

/**
 * 打开新增角色DIV
 */
function openRoleDiv(role) {
	if (role) {
		// 传入菜单ID为修改
		$('#roleDiv').dialog('setTitle', '修改角色');
		$('input[name=roleId]').val(role.roleId ? role.roleId : '');
		$('input[name=roleName]').val(role.roleName ? role.roleName : '');
		$('input[name=roleAlias]').val(role.roleAlias ? role.roleAlias : '');
	} else {
		// 新增菜单
		$('#roleDiv').dialog('setTitle', '新增角色');
	}

	$('#roleDiv').dialog('open');

	$('input[name=roleName]').focus();
}

/**
 * 保存角色
 */
function saveRole() {
	$('#roleForm').form('submit', {
		url : ctx + '/sys/role/save',
		onSubmit : function() {
			return $(this).form('validate');
		},
		success : function(data) {
			var obj = $.parseJSON(data);

			EasyUI.ShowMessage({
				msg : obj.msg
			});

			if (obj.success) {
				$('#roleDatagrid').datagrid('reload');
				closeMenuDiv();
			}
		}
	});
}

/**
 * 删除角色
 */
function removeRole(role) {
	$.post(ctx + '/sys/role/remove', {
		roleId : role.roleId
	}, function(data) {
		var obj = $.parseJSON(data);
		EasyUI.ShowMessage({
			msg : obj.msg
		});
		if (obj.success) {
			$('#roleDatagrid').datagrid('reload');
		}
	});
}

var menuTreeData = [];
/**
 * 加载角色菜单tree
 */
function loadRoleMenuTree(roleId) {
	$.get(ctx + '/sys/menu/query/role?' + Math.random(), {
		roleId : roleId
	}, function(data) {
		var obj = data == '' ? {
			submenuList : []
		} : $.parseJSON(data);
		menuTreeData = EasyUI.GenerateTreeData({
			data : obj.submenuList
		});

		$('#menuTreegrid').treegrid('loadData', menuTreeData);
		$('#menuTreegrid').treegrid('expandAll');
	});
}

/**
 * 打开权限菜单配置
 */
function openRoleMenuDiv() {
	// 取消选中全部节点
	EasyUI.UncheckAllTree($('#roleMenuTree'));
	// 选中拥有权限的树节点
	EasyUI.CheckTree($('#roleMenuTree'), menuTreeData);
	$('#roleMenuDiv').dialog('open');
}

/**
 * 保存角色权限菜单树
 */
function saveRoleMenu() {
	var nodes = $('#roleMenuTree').tree('getChecked', ['checked','indeterminate']);
	var nodeIds = [];
	$.each(nodes, function(i, node) {
		nodeIds.push(node.attributes.menuId);
	});

	var roleRow = $('#roleDatagrid').datagrid('getSelected');
	$.post(ctx + '/sys/role/save/menu', {
		roleId : roleRow.roleId,
		menuIds : nodeIds
	}, function(data) {
		var obj = $.parseJSON(data);
		EasyUI.ShowMessage({
			msg : obj.msg
		});
		if (obj.success) {
			loadRoleMenuTree(roleRow.roleId);
			$('#roleMenuDiv').dialog('close');
		}
	});
}